Package org.python.pydev.debug.console

Source Code of org.python.pydev.debug.console.ConsoleRestartLaunchPageParticipant

/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.debug.console;

import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsolePageParticipant;
import org.eclipse.ui.part.IPageBookViewPage;
import org.python.pydev.debug.core.Constants;
import org.python.pydev.debug.ui.actions.RestartLaunchAction;
import org.python.pydev.debug.ui.actions.TerminateAllLaunchesAction;

/**
* Reference: ProcessConsolePageParticipant
*/
@SuppressWarnings("restriction")
public class ConsoleRestartLaunchPageParticipant implements IConsolePageParticipant, IDebugEventSetListener {

    private RestartLaunchAction restartLaunchAction;
    private TerminateAllLaunchesAction terminateAllLaunchesAction;
    private ProcessConsole fConsole;

    public void init(IPageBookViewPage page, IConsole console) {
        if (!(console instanceof ProcessConsole)) {
            return;
        }
        ProcessConsole processConsole = (ProcessConsole) console;
        IProcess process = processConsole.getProcess();
        if (process == null) {
            return;
        }
        String attribute = process.getAttribute(Constants.PYDEV_ADD_RELAUNCH_IPROCESS_ATTR);
        if (!Constants.PYDEV_ADD_RELAUNCH_IPROCESS_ATTR_TRUE.equals(attribute)) {
            //Only provide relaunch if specified
            return;
        }
        this.fConsole = processConsole;
        DebugPlugin.getDefault().addDebugEventListener(this);

        IActionBars bars = page.getSite().getActionBars();

        IToolBarManager toolbarManager = bars.getToolBarManager();

        restartLaunchAction = new RestartLaunchAction(page, processConsole);
        terminateAllLaunchesAction = new TerminateAllLaunchesAction();

        toolbarManager.appendToGroup(IConsoleConstants.LAUNCH_GROUP, restartLaunchAction);
        toolbarManager.appendToGroup(IConsoleConstants.LAUNCH_GROUP, terminateAllLaunchesAction);

        bars.updateActionBars();

    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[])
     */
    public void handleDebugEvents(DebugEvent[] events) {
        for (int i = 0; i < events.length; i++) {
            DebugEvent event = events[i];
            if (event.getSource().equals(getProcess())) {
                Runnable r = new Runnable() {
                    public void run() {
                        if (restartLaunchAction != null) {
                            restartLaunchAction.update();
                        }
                        if (terminateAllLaunchesAction != null) {
                            terminateAllLaunchesAction.update();
                        }
                    }
                };

                DebugUIPlugin.getStandardDisplay().asyncExec(r);
            }
        }
    }

    protected IProcess getProcess() {
        return fConsole != null ? fConsole.getProcess() : null;
    }

    public Object getAdapter(Class adapter) {
        return null;
    }

    public void dispose() {
        DebugPlugin.getDefault().removeDebugEventListener(this);
        if (restartLaunchAction != null) {
            restartLaunchAction.dispose();
            restartLaunchAction = null;
        }
        if (terminateAllLaunchesAction != null) {
            terminateAllLaunchesAction.dispose();
            terminateAllLaunchesAction = null;
        }
    }

    public void activated() {
    }

    public void deactivated() {
    }

}
TOP

Related Classes of org.python.pydev.debug.console.ConsoleRestartLaunchPageParticipant

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.